The subject matter of the present invention relates to a method and apparatus for providing direct inter-process communications between computer program applications executing in computer workstations that provide a window display interface to an operator, and, more particularly, to an intertask communication framework and associated human interface method and apparatus, disposed in association with each of a plurality of client applications executing in a plurality of workstations, for transmitting an event between two or more computer program applications executing in one or more of the workstations without requiring the transmitted event to pass through an intervening server or dispatcher program executing in one of the workstations.
Computer progams that operate with a network often have multiple programs operating concurrently. It is frequently necessary for information, such as events, to be transferred from one program to another, either within a single workstation or across a network of interconnected computer workstations. An operator at one of the workstations may process information by using different programs operating concurrently in the workstation or across the network of workstations. The operator may also retrieve information by using a multiple number of computer programs executing concurrently in the single workstation or across the network or interconnected workstations. It is therefore important that information be quickly and easily transferred between the multiple number of programs operating in the one or more interconnected workstations.
Windowing software technology is applied where it is important for an operator to display and interact with multiple programs executing concurrently in a computer system comprising one or more interconnected workstations. A xe2x80x9cwindowxe2x80x9d is defined to be a portion of a display screen, such as a cathode ray tube (CRT). The window covers less than the entirety of the screen. As a result, there may be a multiple number of windows on the screen at one time. Typically, the user moves a cursor around the screen by use of an input device known as a mouse or by use of multiple keys on a keyboard. The cursor can be moved from one window to another on the screen, and, when the cursor is present within a particular window on the screen, the user/operator is placed in communication with the application program which generated that particular window on the screen. As a result, the operator may access a multiple number of different application programs thereby accomplishing multiple tasks without having to load a new program each time a new task must be performed.
However, when concurrently accessing a multiple number of different application programs executing in a workstation or across a network of workstations, is is often necessary for a user/operator to transfer information from one windowed program executing in a first workstation to another windowed program executing in either the first workstation or in a second, different workstation connected to the first workstation across the network. Transferring information between programs operating in a windowing environment is disclosed in the preferred embodiment of the present invention; however, such a windowing environment is not necessary in order to practice the invention of this specification as claimed.
There are at least three conventional techniques for transferring information between concurrently operating programs in a computer system.
The first conventional technique is called xe2x80x9ccut and pastexe2x80x9d. This comprises pointing to and selecting information such as text or data in one window to highlight it and thereby separate it from the remaining information in the window. The user presses a special button or key which moves the selected information to an area of memory specially designated by the operating system and known as the xe2x80x9cpaste memoryxe2x80x9d or xe2x80x9cclipboardxe2x80x9d. The user then moves the cursor to another window which is adapted to receive the information. A xe2x80x9cpaste buttonxe2x80x9d or command is invoked by the user to retrieve the stored information from the designated memory area and place it at the location of the cursor. Note that all steps of this process are carried out by the user.
The second conventional technique establishes a programmed connection between two programs, each of which may display information in a window. Both programs must be designed to respond to a predetermined input command that causes information to be shifted from one program to another. This operation may also be entirely under the control of the user and requires a user input in order to function. Each communication path between pairs of programs must be programmed into the code of both programs, which creates an inflexible system. It is also difficult to add new communication paths or to change existing communication paths.
The third conventional technique is described in U.S. Pat. No. 5,448,738 to Good et al issued Sep. 5, 1995, and in European Patent Application number 0 380 211 published on Aug. 1, 1990 and entitled xe2x80x9cMethod for Information Communication between Concurrently Operating Computer Programsxe2x80x9d to William E. Good et al (hereinafter called xe2x80x9cthe Good et al disclosurexe2x80x9d), the disclosures of which are incorporated by reference into the specification of this application. In the Good et al disclosure, the user interfaces with application programs through one or more window displays and an input device on a computer workstation. One or more information codes and one or more corresponding application programs are registered with a dispatcher program (otherwise known as a xe2x80x9cserverxe2x80x9d). As a result, a list is formed in the dispatcher program, the list including a plurality of information codes and a corresponding plurality of application program identifiers. Then, when a first application program wants to send event information to another concurrently executing second application program, a template, which includes event information and a corresponding information code, is generated by the first application program and the template is transmitted by the first application program to the dispatcher program. The information code in the template from the first application program is compared with the information code in the list registered with the dispatcher program. If a match between information codes is found, the event information associated with the information code in the template is transmitted to the application program that is associated with the information code in the list registered with the dispatcher program.
The Good et al disclosure is similar to other conventional, prior art tools for enabling inter-process communication between application programs, all of which are based on xe2x80x9cclient-server techniquesxe2x80x9d. Examples of such conventional tools include the xe2x80x9cX Window Systemxe2x80x9d and Sun""s xe2x80x9cTooltalkxe2x80x9d. In the Good et al disclosure and the other conventional tools, when using the prior art client-server techniques, all of the data to be communicated between concurrently executing computer program applications must be routed through a server program (the xe2x80x9cserver programxe2x80x9d being similar to the xe2x80x9cdispatcher programxe2x80x9d in the Good et al disclosure). If many concurrently executing program applications exist in the network, the server or dispatcher may have too many event messages to transmit at any one time. This results in slower throughput as well as increased network traffic. In addition, when using the prior art client-server technique, the user operator executing a first application program can send only certain preselected event information messages to a second application program. That is, the user can send only a fixed set of predefined event information messages which are allowed by the system network; he cannot define or customize his own event information messages for transmission to the second application program. For example, if a font size was changed in one application, using the conventional client-server technique (where all event messages must be routed through the server), there was no way to communicate the changed font size, changed in one application, to any other application in the network because the xe2x80x9cchanged font sizexe2x80x9d was not among the fixed set of predefined event information messages allowed for transmission from one application to another application in the network. In addition, when using the conventional client-server technique, particular event information data must always be communicated from a first computer program application to a server program and from the server program to a second program application. Yet, that server program may not know if any other program applications are interested in receiving that particular event data. As a result, when the server receives the particular event information data from the first program application, the server must then determine if any other applications are interested in receiving that particular event data. If no other applications are interested in receiving the particular event data, the server program wasted its resources in handling the particular event data because it will never be communicated to any other application.
Furthermore, data communicated while using the conventional tools are poorly structured (forming xe2x80x9cglobsxe2x80x9d) and provide no mechanism for checking for errors in the data communicated. It is the responsibility of the application programs to interpret the data in the correct manner and handle error conditions. Therefore, when using the conventional tools, the ability of the application programmer to inter-communicate complex data structures between concurrently executing computer program applications is very limited.
As noted earlier, the conventional tools do not provide a mechanism which would allow application programmers to selectively extend or customize the type of events and/or data which could be inter-communicated between concurrently executing applications executing in one or more computer workstations. As a result, the absence of a sufficiently high level of programming abstraction in these conventional tools requires application programmers to be concerned with low level issues, such as data formats on various platforms and communication rendevous (such as, a known property name of a known window, as in the prior art xe2x80x9cX Window Systemxe2x80x9d).
Finally, these conventional tools provide no easy way for end-users of applications to control the flow of data and visualize the connectivity between applications.
Therefore, there is a need for a framework that will: allow fast communication and sharing of complex data, allow strong typing of data structures, and provide a degree of extensibility when using application-defined data types and events.
In addition, there is a need for a framework that will allow end users of workstation applications to visualize the connectivity network between workstation applications and will enable the end users sitting at those workstations to control the inter-process data communication between computer program applications which are concurrently executing in one or more computer workstation environments.
Accordingly, it is a primary object of the present invention to provide an extensible intertask communication method and apparatus that is adapted for transmitting and communicating event data between a first client application and a plurality of second client applications concurrently executing in one or more workstations of a network without requiring that event data to pass through and register with an intervening server or dispatcher application, the intertask communication method and apparatus being adapted to be interconnected between the first and the second client applications during the communication of that event data between the first client application and the second client applications.
It is a further object of the present invention to provide an extensible intertask communication method and apparatus adapted for transmitting and communicating event data between a first client application and a plurality of second client applications concurrently executing in one or more workstations of a network without requiring that event data to pass through and register with an intervening server or dispatcher application, the intertask communication method and apparatus including means for predefining in each client application a selected set of events and interest objects and functions, a first client application being interested in receiving a first event and a second client application transmitting the first event to the first client application without registering the first event with the server when the second client application practices the first event.
It is a further object of the present invention to provide an extensible intertask communication method and apparatus adapted for transmitting and communicating event data between a first client application and a plurality of second client applications concurrently executing in one or more workstations of a network without requiring that event data to pass through and register with an intervening server or dispatcher application, the intertask communication method and apparatus including means for predefining in each client application a selected set of events and interest objects and functions, a first client application being interested in receiving a first event and a second client application transmitting the first event to the first client application without registering the first event with the server when the second client application practices the first event and means for advising the second client application that the first client application is interested in the selected set of event data messages.
It is a further object of the present invention to provide an extensible intertask communication method and apparatus adapted for transmitting and communicating event data between a first client application and a plurality of second client applications concurrently executing in one or more workstations of a network without requiring that event data to pass through and register with an intervening server or dispatcher application, the intertask communication method and apparatus including: means for predefining in each client application a selected set of events and functions and interest objects where a first client application is interested in receiving an event data message associated with a first event and a second client application is adapted to transmit the first event data message to the first client application without registering the first event data message with the server when the second client application practices the first event; means for advising the second client application that the first client application is interested in receiving the first event data message; means for transmitting the first event data message directly from the second client application to the first client application when the first event is practiced by the second client application; means for selectively determining which ones, if any, of the selected set of event data messages predefined in the first client application will be received in the first client application; and means for selectively determining which ones, if any, of the selected set of event data messages predefined in the second client application, where an interest object was sent from the first client application to the second client application, will be transmitted from the second client application to the first client application.
It is a further object of the present invention to provide an extensible intertask communication method and apparatus adapted for transmitting and communicating event data between a first client application and a plurality of second client applications, where the intertask communication method and apparatus further includes means for completely preventing any of the selected set of event data messages predefined in the first client application from being received into the first client application from the second client application, and means for completely preventing any of the selected set of event data messages predefined in the second client application, where an interest object was sent from the first client application to the second client application via the server, from being transmitted from the second client application.
It is a further object of the present invention to provide an extensible intertask communication method and apparatus adapted for transmitting and communicating event data between a first client application and a plurality of second client applications, where the intertask communication method and apparatus further includes means for completely allowing all of the selected set of event data messages predefined in the first client application to be received into the first client application from the second client application, and means for completely allowing all of the selected set of event data messages predefined in the second client application, where an interest object was sent from the first client application to the second client application via the server, to be transmitted from the second client application.
It is a further object of the present invention to provide an extensible intertask communication method and apparatus adapted for transmitting and communicating event data between a first client application and a plurality of second client applications, where the intertask communication method and apparatus further includes means for preventing any event data messages from being received in or transmitted from a first client application, and means for subsequently broadcasting a plurality of the event data messages from the first client application to the second client application following the practice by the first client application of the plurality of events associated with the plurality of event data messages.
It is a further object of the present invention to provide an easy to use graphical user interface for use with the intertask communication method and apparatus of the present invention in order to allow the user/operator to easily visualize and control the functional operation of the Framework portion of each client application.
In accordance with these and other objects of the present invention, one or more workstations are interconnected together by an extensible intertask communication (ITC) apparatus. A workstation has a display, and the display will present one or more windows to an operator. Each window is being generated on the workstation display in response to the execution of an application program which is stored in the workstation memory and is being executed by the workstation processor. The application program is hereinafter called a xe2x80x9cclient applicationxe2x80x9d. The intertask communication (ITC) apparatus actually includes at least a first and a second client application, stored in either one workstation memory or in a pair of workstation memories, and a separate server program stored in one of the workstation memories. Each client application will include a Human Interface Code and a Framework Code.
The Framework Code of each client application in conjunction with the server program, of the intertask communication (ITC) method and apparatus in accordance with the present invention, will transmit and communicate event information directly between the first client application and the second client application, of a plurality of client application programs concurrently executing in one or more workstations of a network of interconnected workstations, without requiring that event information to pass through and register with an intervening server or dispatcher application program, if and when an interest object is initially transmitted between the first client application and the second client application via the server program.
An event is defined to be a change or an action taken by one operator at a workstation. For example, that operator may drag the cursor by moving a mouse or perhaps the operator will delete data or create new data. That event information, being practiced by one operator in one program application at one workstation, may be needed by another operator in another program application at another workstation. The interprocess communication method and apparatus of the present invention can transmit that event information from the one program application to all other program applications in the network of workstations, without requiring that event information to register with an intervening server or dispatcher program, provided that an interest object(s) was initially transmitted between the one program application and all the other program applications via a server which are concurrently executing in all of the workstations in the network of workstations.
Hereinafter, one program application, executing in one workstation in the network, will be called a xe2x80x9cfirst client applicationxe2x80x9d, and another program application, executing in the one workstation or in any other workstation in the network of workstations, will be called a xe2x80x9csecond client applicationxe2x80x9d. If a second client application executing in a second workstation is programmed to receive a certain plurality of events, and if an interest object associated with the plurality of events was transmitted from the second client application to a first client application (executing in either the second workstation or a first workstation) via a server program, and when a first event of the plurality of events is being practiced by an operator in a first client application, a set of information associated with that first event will be transmitted from the first client application in a first workstation directly to a second client application executing in either the first workstation or another workstation in the network. However, the set of information associated with that first event will not pass through and register with the server program. As a result, the application programmer can customize the type of and number of events which he requires to be transmitted between client applications by simply pre-programming a particular client application to receive event information associated with a preselected plurality of events.
More particularly, before event information can be transmitted directly between client applications, the following steps must be taken:
1. Each client application in a plurality of client applications are programmed to receive one or more events and to practice one or more functions associated, respectively, with the one or more events (hereinafter called, a xe2x80x9clist of eventsxe2x80x9d). When the one or more events and the one or more functions associated with the one or more events are programmed into a particular client application""s list of events, that particular client application is said to be interested in receiving event information from other concurrently executing client applications when the events being practiced by the other client applications correspond to the one or more events which are programmed into the particular client application""s list of events.
2. Since each event of the one or more events programmed into the particular client application""s list of events includes an event identifier or xe2x80x9cinterest objectxe2x80x9d, the interest objects associated, respectively, with the one or more events are transmitted from the particular client application to an intervening server or dispatcher program which may be resident in another workstation or in the workstation executing the particular client application.
3. The intervening server will re-transmit the interest objects, of the one or more events, to all other concurrently executing client applications which are executing in all the other workstations of the network of workstations. Similarly, all client applications transmit their interests through the server.
4. If a first particular client application program practices an event which corresponds to a previously received interest object which was transmitted from a second particular client application to the first client application via the server, event information associated with that event being practiced by the first particular client application (including the interest object) will be sent out along the network of workstations directly to the second particular client application. Note that the event information associated with the event being practiced by the first particular client application will not be routed through the intervening server or dispatcher program. As a result, when the event is being practiced in the first particular client application, the event information associated with that same event will be approximately simultaneously practiced in the second particular client application. By building the list of events in each client application, the client application developer can customize the type and quantity of events which the client application will send to or receive from other client applications. Since the server program is avoided when the event information is transmitted directly between client applications, valuable processing time is conserved.
However, even though the information associated with the event being practiced by the first particular client application is transmitted directly to the second particular client application, the second particular client application is not required to actually receive the information associated with the event being practiced by the first particular client application. That is, an operator monitoring the second particular client application can use a mouse to click on certain icons which appear in the bottom right hand corner of a window which is displayed in response to the execution of the second particular client application.
For example, the operator can click on a first type of icon called the xe2x80x9cstatus iconxe2x80x9d. There are three types of xe2x80x9cstatus iconsxe2x80x9d: an xe2x80x9copen statexe2x80x9d status icon, a xe2x80x9cclosed statexe2x80x9d status icon, and a xe2x80x9clocked statexe2x80x9d status icon. If the operator clicks on the xe2x80x9copen statexe2x80x9d status icon for a second particular client application, the second particular client application is open and it will receive all of the event information associated with the event being practiced by the first particular client application. If the operator clicks on the xe2x80x9cclosed statexe2x80x9d status icon for the second particular client application, the second particular client application is closed and it will not receive any of the information associated with the event being practiced by the first particular client application. The operator can click on the xe2x80x9clocked statexe2x80x9d status icon of the second particular client application although the internal xe2x80x9cicon generationxe2x80x9d program code for the second particular client application can decide if the locked state status icon is either xe2x80x9conxe2x80x9d or xe2x80x9coffxe2x80x9d. That is, with regard to the xe2x80x9clocked statexe2x80x9d status icon, the application developer can decide that, in certain circumstances, the second particular client application will be closed, will not receive any of the event information associated with the event being practiced by the first particular client application, and will remain closed even if and when the operator at the workstation monitoring the second particular client application clicks on the xe2x80x9copen statexe2x80x9d status icon.
The operator at the workstation monitoring the first particular client application can click on a second type of icon called the xe2x80x9cbroadcastxe2x80x9d icon. If the status icons for the first particular client application are in the xe2x80x9cclosed statexe2x80x9d for a particular period of time, absolutely no event information associated with any of the events practiced by the first particular client application will be transmitted out to the network by the first particular client application to any other client applications, including the second particular client application, for that particular period of time. However, assume that, following the expiration of that particular period of time, the operator at the workstation monitoring the first particular client application decides to transmit all event information to the second client application associated with events which were practiced by the first particular client application during the particular period of time. In order to transmit all such event information to the second particular client application, the operator at the workstation monitoring the first particular client application clicks on the xe2x80x9cbroadcastxe2x80x9d icon. When the operator monitoring the first particular client application clicks on the xe2x80x9cbroadcastxe2x80x9d icon, event information associated with a plurality of events which were practiced by the first particular client application during the particular period of time when the first particular client application was xe2x80x9cclosedxe2x80x9d will be transmitted to the second particular client application, provided that interest objects associated with those plurality of events were previously transmitted from the second particular client application to the server and from the server to the first particular client application.
The operator at the workstation monitoring the first particular client application can click on still another type of icon called the xe2x80x9cevent filterxe2x80x9d icon. The xe2x80x9cevent filterxe2x80x9d icon appears in the bottom right hand corner of each window on a workstation display, the event filter enabling the operator to selectively choose which events of a plurality of events (being practiced by a particular client application) will be transmitted to another client application(s) and which events of the plurality of events will be received from the other client applications.